package admin

import (
	"Walker/app/http/model"
	"Walker/app/http/validator"
	"Walker/app/http/validator/admin"
	"Walker/app/services"
	"Walker/app/utils/data"
	"Walker/app/utils/response"
	"Walker/global"
	"github.com/gin-gonic/gin"
	"strings"
)

type SystemFunc struct {
	systemFuncService services.SystemFunc
	systemFuncModel   model.SystemFunc
}

// 	@Tags 方法管理模块
// 	@Summary 方法列表
// 	@Description 方法列表
// 	@Accept json
// 	@Produce json
// 	@Param keywords query string false "关键词"
// 	@Param status query int false "状态1是正常0是异常"
// 	@Success 200 {object} response.JsonResult{data=model.SystemFuncPage,total_rows=int}
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_func [get]
//	@Security ApiKeyAuth
func (controller *SystemFunc) Index(ctx *gin.Context) {
	list, err := controller.systemFuncService.Index(ctx)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "添加成功", list)
	return
}

// 	@Tags 方法管理模块
// 	@Summary 添加方法
// 	@Description 添加方法
// 	@Accept json
// 	@Produce json
// 	@Param body body admin.SystemFuncRequest true "json参数"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_func [post]
//	@Security ApiKeyAuth
func (controller *SystemFunc) Store(ctx *gin.Context) {
	var param admin.SystemFuncRequest
	err := validator.Verify(ctx, &param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	err = controller.systemFuncService.Edit(param, 0)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "添加成功", "")
	return
}

// 	@Tags 方法管理模块
// 	@Summary 修改方法
// 	@Description 修改方法
// 	@Accept json
// 	@Produce json
// 	@Param id path int true "主键id"
// 	@Param body body admin.SystemFuncRequest true "json参数"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_func/{id} [put]
//	@Security ApiKeyAuth
func (controller *SystemFunc) Update(ctx *gin.Context) {
	var param admin.SystemFuncRequest
	err := validator.Verify(ctx, &param)
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	err = controller.systemFuncService.Edit(param, data.StringToInt(ctx.Param("id")))
	if err != nil {
		response.Error(ctx, err.Error())
		return
	}
	response.Success(ctx, "添加成功", "")
	return
}

// 	@Tags 方法管理模块
// 	@Summary 删除方法
// 	@Description 删除方法
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id多个逗号隔开"
// 	@Success 200 {object} response.JsonResult
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_func/{id} [delete]
//	@Security ApiKeyAuth
func (controller *SystemFunc) Destroy(ctx *gin.Context) {
	result := global.DB.Delete(&controller.systemFuncModel, strings.Split(ctx.Param("id"), ","))
	if result.Error != nil {
		response.Error(ctx, result.Error.Error())
		return
	}
	response.Success(ctx, "删除成功", "")
	return
}

// 	@Tags 方法管理模块
// 	@Summary 查看方法
// 	@Description 查看方法
// 	@Accept json
// 	@Produce json
// 	@Param id path string true "主键id多个逗号隔开"
// 	@Success 200 {object} response.JsonResult{data=model.SystemFunc}
// 	@Failure 400 {object} response.JsonResult
// 	@Router /system_func/{id} [get]
//	@Security ApiKeyAuth
func (controller *SystemFunc) Show(ctx *gin.Context) {
	result := global.DB.Where("id=?", ctx.Param("id")).First(&controller.systemFuncModel)
	if result.Error != nil {
		response.Error(ctx, result.Error.Error())
		return
	}
	response.Success(ctx, "查询成功", controller.systemFuncModel)
	return
}
